﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE.Gen;


namespace Insifo.DL.Gen
{
    public class DLParametro :  DLTransaction, IDLTransaccion<BEParametro>
    {
        #region  Members
        
        /// <summary>
        /// Método obtiene un Parametro
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public BEParametro Obtener(BEParametro pbe)
        {
            BEParametro be = new BEParametro();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Parametro_Obtener");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                sqlDB.AddInParameter(dbCmd, "@ai_IdCompania", DbType.String, pbe.IdCompania);
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.String, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Parametro", DbType.String, pbe.Parametro);
                
                using (IDataReader dr = sqlDB.ExecuteReader(dbCmd))
                {
                    while (dr.Read())
                    {
                        be.TipoDato = DBValue.Get<string>(dr, "TipoDato");
                        be.Texto = DBValue.Get<string>(dr, "Texto");
                        be.Numero = DBValue.Get<decimal>(dr, "Numero");
                        be.Fecha = DBValue.Get<DateTime>(dr, "Fecha");
                        be.Descripcion = DBValue.Get<string>(dr, "Descripcion");
                        be.Tipo = DBValue.Get<string>(dr, "Tipo");
                        be.Definicion = DBValue.Get<string>(dr, "Definicion");
                        break;
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        public DataSet Listar(BEParametro pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Parametro_Listar");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_TipoDato", DbType.String, pbe.TipoDato);
                sqlDB.AddInParameter(dbCmd, "@as_Tipo", DbType.String, pbe.Tipo);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }


        /// <summary>
        /// Método obtiene Datos del Parametro
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        /// 
        public BEParametro ObtenerMant(BEParametro pbe)
        {
            BEParametro be = new BEParametro();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Parametro_Obtener_Mant");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdParametro", DbType.Int32, pbe.IdParametro);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdAplicacion = DBValue.Get<Int32>(reader, "IdAplicacion");
                        be.IdCompania = DBValue.Get<Int32>(reader, "IdCompania");
                        be.Parametro = DBValue.Get<String>(reader, "Parametro");
                        be.Descripcion = DBValue.Get<String>(reader, "Descripcion");
                        be.TipoDato = DBValue.Get<String>(reader, "TipoDato");
                        be.Texto = DBValue.Get<String>(reader, "Texto");
                        be.Numero = DBValue.Get<Decimal>(reader, "Numero");
                        be.Fecha = DBValue.Get<DateTime>(reader, "Fecha") == DateTime.MinValue ? (DateTime?)null : DBValue.Get<DateTime>(reader, "Fecha");
                        be.Tipo = DBValue.Get<String>(reader, "Tipo");
                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        be.UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        be.UsuarioCreacion = DBValue.Get<String>(reader, "UsuarioCreacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        be.Definicion = DBValue.Get<String>(reader, "Definicion");

                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }



        /// <summary>
        /// Método Inserta un GParametro
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEParametro Insertar(BEParametro pbe)
        {
            BEParametro be = new BEParametro();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Parametro_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdCompania", DbType.Int32, pbe.IdCompania);
                sqlDB.AddInParameter(dbCmd, "@as_Parametro", DbType.String, pbe.Parametro);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_TipoDato", DbType.String, pbe.TipoDato);
                sqlDB.AddInParameter(dbCmd, "@as_Texto", DbType.String, pbe.Texto);
                sqlDB.AddInParameter(dbCmd, "@an_Numero", DbType.Decimal, pbe.Numero);
                sqlDB.AddInParameter(dbCmd, "@as_Fecha", DbType.DateTime, pbe.Fecha);
                sqlDB.AddInParameter(dbCmd, "@as_Tipo", DbType.String, pbe.Tipo);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);
                sqlDB.AddInParameter(dbCmd, "@as_Definicion", DbType.String, pbe.Definicion);
                
                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdParametro = DBValue.Get<int>(reader, "IdParametro");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza un Grupo de Reporte
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEParametro Actualizar(BEParametro pbe)
        {
            BEParametro be = new BEParametro();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Parametro_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdParametro", DbType.Int32, pbe.IdParametro);
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdCompania", DbType.Int32, pbe.IdCompania);
                
                sqlDB.AddInParameter(dbCmd, "@as_Parametro", DbType.String, pbe.Parametro);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_TipoDato", DbType.String, pbe.TipoDato);
                sqlDB.AddInParameter(dbCmd, "@as_Texto", DbType.String, pbe.Texto);
                sqlDB.AddInParameter(dbCmd, "@an_Numero", DbType.Decimal, pbe.Numero);
                sqlDB.AddInParameter(dbCmd, "@as_Fecha", DbType.DateTime, pbe.Fecha);
                sqlDB.AddInParameter(dbCmd, "@as_Tipo", DbType.String, pbe.Tipo);

                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);
                sqlDB.AddInParameter(dbCmd, "@as_Definicion", DbType.String, pbe.Definicion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdParametro = DBValue.Get<Int32>(reader, "IdParametro");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza el Parametro
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEParametro Eliminar(BEParametro pbe)
        {
            BEParametro be = new BEParametro();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Parametro_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@ai_IdParametro", DbType.Int32, pbe.IdParametro);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);
                sqlDB.AddInParameter(dbCmd, "@adt_FechaModificacion", DbType.DateTime, pbe.FechaModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdParametro = DBValue.Get<Int32>(reader, "IdParametro");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        public DataSet Listar_Sel(BEParametro pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Parametro_Listar_Sel");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Tipo", DbType.String, pbe.Tipo);
                sqlDB.AddInParameter(dbCmd, "@as_Texto", DbType.String, pbe.Texto);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }

        #endregion  Members
    }
}
